#pragma once

#include <TDocStd_Application.hxx>
#include <Standard_CString.hxx>
#include <Handle_TDocStd_Document.hxx>
#include <Standard_Macro.hxx>


class Standard_Transient;
class Handle_Standard_Type;
class Handle(TDocStd_Application);
class TOcaf_Application;

Handle_Standard_Type& STANDARD_TYPE(TOcaf_Application);

class Handle(TOcaf_Application) : public Handle(TDocStd_Application) {
public:
	Handle(TOcaf_Application)():Handle(TDocStd_Application)() {} 
	Handle(TOcaf_Application)(const Handle(TOcaf_Application)& aHandle) : Handle(TDocStd_Application)(aHandle) 
	{
	}

	Handle(TOcaf_Application)(const TOcaf_Application* anItem) : Handle(TDocStd_Application)((TDocStd_Application *)anItem) 
	{
	}

	Handle(TOcaf_Application)& operator=(const Handle(TOcaf_Application)& aHandle)
	{
		Assign(aHandle.Access());
		return *this;
	}

	Handle(TOcaf_Application)& operator=(const TOcaf_Application* anItem)
	{
		Assign((Standard_Transient *)anItem);
		return *this;
	}

	TOcaf_Application* operator->() 
	{
		return (TOcaf_Application *)ControlAccess();
	}

	TOcaf_Application* operator->() const 
	{
		return (TOcaf_Application *)ControlAccess();
	}

	~Handle(TOcaf_Application)(){};

	static const Handle(TOcaf_Application) DownCast(const Handle(Standard_Transient)& AnObject);
};

//////////////////////////////////////////////////////////////////////////
class TColStd_SequenceOfExtendedString;
class TDocStd_Document;
class TOcaf_Application : public TDocStd_Application {

public:
	TOcaf_Application();
	virtual  void Formats(TColStd_SequenceOfExtendedString& Formats) ;
	Standard_CString ResourcesName() ;
	~TOcaf_Application();

	// Type management
	friend Handle_Standard_Type& TOcaf_Application_Type_();
	const Handle(Standard_Type)& DynamicType() const;
	Standard_Boolean	       IsKind(const Handle(Standard_Type)&) const;
};

//////////////////////////////////////////////////////////////////////////